package com.yangrong.thread.chapter1;

/**
 * 单例模式的懒加载
 * 
 * @author YangRong
 * @date 2020年6月3日
 */
public class SingletonObject5 {

	// 将instance定义为volatile，解决多线程下可能获得不完整实例的问题，volatile对象严格遵守happen-before原则，在对象进行读操作前必须进行完成写操作
	private static volatile SingletonObject5 instance;

	private SingletonObject5() {
		// empty
	}

	// double check and volatile
	public static SingletonObject5 getInstance() {
		if (null == instance) {
			synchronized (SingletonObject5.class) {
				if (null == instance)
					instance = new SingletonObject5();
			}
		}

		return SingletonObject5.instance;
	}

}
